/* eslint-disable no-use-before-define */

import axios, { type Paging, type Response } from '@/utils/axios/axios';

/**
 * 得到分类
 * @param haveAll - 是否包含全部
 */
export function getDramaCategoryAxios(haveAll: boolean): Promise<Response<DramaCategory[]>> {
  return axios.get(`/app/dramaCategory/list`, { data: { haveAll } }) as Promise<Response<DramaCategory[]>>;
}

/** 得到首页的轮播图 */
export function getHomeBannerAxios(bannerType: 1 | 2 | 3): Promise<Response<Paging<HomeBanner>>> {
  return axios.get(`/app/banner/getBannerPage`, { data: { current: 1, size: 5, bannerType } }) as Promise<Response<Paging<HomeBanner>>>;
}

/** 根据userId,查询观看记录 */
export function getDramaViewRecordListAxios(current: number, size: number): Promise<Response<Paging<DramaViewRecord>>> {
  return axios.get(`/app/dramaViewRecord/getViewRecordByUserId`, { data: { current, size } }) as Promise<Response<Paging<DramaViewRecord>>>;
}

/** 根据userId,最后一条观看记录 */
export function getLastViewRecordByUserIdAxios(): Promise<Response<DramaViewRecord>> {
  return axios.get(`/app/dramaViewRecord/getLastViewRecordByUserId`) as Promise<Response<DramaViewRecord>>;
}

/** 热门短剧列表（观看量最多） */
export function getHotDramaListAxios(current: number, size: number): Promise<Response<Paging<HotDrama>>> {
  return axios.get(`/app/drama/getHotDramaPage`, { data: { current, size } }) as Promise<Response<Paging<HotDrama>>>;
}

/** 达人推荐列表 */
export function getGoodDramaListAxios(current: number, size: number): Promise<Response<Paging<HandpickDrama>>> {
  return axios.get(`/app/drama/getRecommendPage`, { data: { current, size } }) as Promise<Response<Paging<HandpickDrama>>>;
}

/** 新增观看记录 */
export function addDramaViewRecordAxios(data: { dramaId: number; dramaEpisodeId: number; episodeSeq: number }): Promise<Response<string>> {
  return axios.post(`/app/dramaViewRecord/add`, data) as Promise<Response<string>>;
}

/** 得到所有短剧 */
export function newDramaListAxios(data: NewDramaRequest): Promise<Response<Paging<ChasingDrama>>> {
  return axios.get(`/app/drama/page`, { data }) as Promise<Response<Paging<ChasingDrama>>>;
}
/** 得到短剧详情 */
export function getDramaDetialAxios(data: { dramaId?: number; thirdDramaId?: string }): Promise<Response<DramaDetial>> {
  return axios.get(`/app/drama/getDramaDetial`, { data }) as Promise<Response<DramaDetial>>;
}

/** 我的追剧追剧列表 */
export function myChasingDramaListAxios(current: number, size: number): Promise<Response<Paging<MyChasingDrama>>> {
  return axios.get(`/app/dramaChasingRecord/getChasingRecordByUserId`, { data: { current, size } }) as Promise<Response<Paging<MyChasingDrama>>>;
}

/** 新增追剧 */
export function addChasingDramaAxios(data: { dramaId: number } | { thirdDramaId: string }): Promise<Response<null>> {
  return axios.post(`/app/dramaChasingRecord/add`, data) as Promise<Response<null>>;
}

/** 取消追剧 */
export function cancelChasingDramaAxios(data: { dramaId: number } | { thirdDramaId: string }): Promise<Response<null>> {
  return axios.post(`/app/dramaChasingRecord/cancel`, data) as Promise<Response<null>>;
}

/** 我的观看记录列表 */
export function watchDramaRecordsListAxios(current: number, size: number): Promise<Response<Paging<WatchDrama>>> {
  return axios.get(`/app/dramaViewRecord/getViewRecordByUserId`, { data: { current, size } }) as Promise<Response<Paging<WatchDrama>>>;
}

/** 搜索剧集 */
export function searchDramaListAxios(current: number, size: number, dramaTitle: string): Promise<Response<Paging<SearchDrama>>> {
  return axios.get(`/app/drama/queryPage`, { data: { current, size, dramaTitle } }) as Promise<Response<Paging<SearchDrama>>>;
}
/** 搜索发现 */
export function searchDramaFindAxios(): Promise<Response<Record<'dramaTitle', string>[]>> {
  return axios.get(`/app/drama/getTopHotDramas`) as Promise<Response<Record<'dramaTitle', string>[]>>;
}

/** 添加观看记录 */
export function addWatchDramaAxios(data: { dramaId: number; dramaEpisodeId: number } | { thirdDramaId: string; episodeSeq: number }): Promise<Response<null>> {
  return axios.post(`/app/dramaViewRecord/add`, data) as Promise<Response<null>>;
}

/** 已购剧集 */
export function payDramaRecordsAxios(current: number, size: number): Promise<Response<Paging<PayDrama>>> {
  return axios.get(`/app/dramaUnlockRecord/getAppPage`, { data: { current, size } }) as Promise<Response<Paging<PayDrama>>>;
}

/** 短剧追剧排行榜 */
export function getDramaBingeWatchRankingAxios(current: number, size: number): Promise<Response<Paging<DramaChasingRank>>> {
  return axios.get(`/app/drama/getDramaChasingRanking`, { data: { current, size } }) as Promise<Response<Paging<DramaChasingRank>>>;
}

/** 短剧收入排行榜 */
export function getDramaIncomeRankingAxios(current: number, size: number): Promise<Response<Paging<DramaPaidRank>>> {
  return axios.get(`/app/dramaIncome/getDramaIncomeRanking`, { data: { current, size } }) as Promise<Response<Paging<DramaPaidRank>>>;
}
/** 根据id查询短剧详情以及剧集列表信息 */
export function getDramaInfoByIdAxios(data: { dramaId: number; referralLinkId?: number }): Promise<Response<DramaAllInfo>> {
  return axios.post(`/app/drama/initWebDramaPlayInfo`, data) as Promise<Response<DramaAllInfo>>;
}
/**
 * 初始化微信播放信息
 */
export function initWxDramaPlayInfoAxios(data: InitWxDramaPlayInfoRequest): Promise<Response<InitWxDramaPlayInfo>> {
  return axios.post(`/app/drama/initDramaPlayInfo`, data) as Promise<Response<InitWxDramaPlayInfo>>;
}

/**
 * 初始化快手播放信息
 */
export function initKsDramaPlayInfoAxios(data: InitKsDramaPlayInfoRequest): Promise<Response<InitKsDramaPlayInfo>> {
  return axios.post(`/app/drama/initKsDramaPlayInfo`, data) as Promise<Response<InitKsDramaPlayInfo>>;
}

/**
 * 初始化抖音播放信息
 */
export function initDyDramaPlayInfoAxios(data: InitDyDramaPlayInfoRequest): Promise<Response<InitDyDramaPlayInfo>> {
  return axios.post(`/app/drama/initDyDramaPlayInfo`, data) as Promise<Response<InitDyDramaPlayInfo>>;
}

/**
 * 模版调用次数埋点
 */
export function eventTrackingPayTemplateAxios(data: EventTrackingPayTemplateRequest): Promise<Response<string>> {
  return axios.post(`/app/eventTracking/payTemplate`, data) as Promise<Response<string>>;
}

export type EventTrackingPayTemplateRequest =
  | {
      /** 短剧id  */
      dramaId: number;
      /** 第几集 */
      episodeSeq: number;
      /** 剧集 ID */
      episodeId: number;
      /** 链接 id */
      referralLinkId?: number;
    }
  | {
      /** 链接 id */
      referralLinkId?: number;
      /** 第几集 */
      episodeSeq: number;
      /** 第三方剧集id */
      thirdEpisodeId?: string;
      /** 第三方短剧id */
      playletId?: string;
    };

export type DramaDetial = {
  /** 短剧分类集合  */
  categoryList: DramaCategory[];
  /** 短剧名称 */
  dramaTitle: string;
  /** 短剧年份 */
  dramaYear: string;
  /** 更新剧集数 */
  episodeNum: number;
  /** 剧集信息 */
  episodeList: EpisodeItem[];
  /** 是否追剧：0-否；1-是； */
  isChasing: number;
  /** 演员角色集合 */
  performerRoleList: PerformerRole[];
  /** 总集数 */
  seqNum: number;
  /** 第三方短剧id */
  thirdDramaId: string;
  /** 短剧封面图 */
  dramaCover: string;
  /** 简介 */
  dramaDesp?: string;
};

export interface NewDramaRequest {
  /** APP上架状态：0-已下架；1-已上架； */
  appStatus?: number;
  /** 短剧分类id */
  categoryId?: number;
  /** 当前页   */
  current: number;
  /** 短剧更新状态：1-未上映；2-更新中；3-已完结； */
  dramaStatus?: number;
  /** 短剧名称 */
  dramaTitle?: string;
  /** 抖音发布状态：0-待发布；1-发布中；2-发布完成；3-发布失败；4-发布待更新； */
  dyPushStatus?: number;
  /** 抖音上架状态：0-已下架；1-已上架；  */
  dyStatus?: number;
  /** 快手发布状态：0-待发布；1-发布中；2-发布完成；3-发布失败；4-发布待更新；   */
  ksPushStatus?: number;
  /** 快手上架状态：0-已下架；1-已上架； */
  ksStatus?: number;
  /** 每页数量  */
  size: number;
  /** 上架状态：0-下架；1-上架中； */
  status?: number;
  /** 网页上架状态：0-已下架；1-已上架； */
  webStatus?: number;
  /** 微信发布状态：0-待发布；1-发布中；2-发布完成；3-发布失败；4-发布待更新； */
  wechatPushStatus?: number;
  /** 微信上架状态：0-已下架；1-已上架； */
  wechatStatus?: number;
  /** 分类名称 */
  categoryName?: string;
}

export type InitDyDramaPlayInfoRequest = {
  /** 第三方短剧id */
  thirdDramaId: string;
  /** 营销链接 */
  referralLinkId: number | undefined;
  /** 广告点击id */
  clickid: string | undefined;
  /** 全部参数 */
  launchQuery: string | undefined;
  /** 项目id */
  projectId: string | undefined;
  /** 广告计划ID */
  promotionId: string | undefined;
  /** 渠道id */
  channelId: string | undefined;
};

export type InitKsDramaPlayInfoRequest = {
  /** 第三方短剧id */
  thirdDramaId: string;
  /** 营销链接 */
  referralLinkId: number | undefined;
  /** 广告点击id */
  clickid: string | undefined;
  /** 全部参数 */
  launchQuery: string | undefined;
  /** 项目id */
  projectId: string | undefined;
  /** 广告计划ID */
  promotionId: string | undefined;
  /** 渠道id */
  channelId: string | undefined;
};

export type InitWxDramaPlayInfoRequest = {
  /** 第三方短剧id */
  thirdDramaId: string;
  /** 营销链接 */
  referralLinkId: number | undefined;
  /** 广告点击id */
  clickid: string | undefined;
  /** 全部参数 */
  launchQuery: string | undefined;
  /** 项目id */
  projectId: string | undefined;
  /** 广告计划ID */
  promotionId: string | undefined;
  /** 渠道id */
  channelId: string | undefined;
};

export interface InitKsDramaPlayInfo {
  /** 短剧名称 */
  dramaTitle: string;
  /** 所有的第三方剧集ID */
  episodeIdList: string[];
  /** 免费剧集 */
  freeEpisodeList: number[];
  /**免费集数 */
  freeEpisodeNum: number;
  /** 是否追剧：0-否；1-是；*/
  isChasing: 0 | 1;
  /** 付费剧集序号 */
  payEpisodeList: number[];
  /** 总集数*/
  seqNum: number;
  /** 第三方短剧id */
  thirdDramaId: string;
  /** 短剧封面 */
  dramaCover: string;
  /** 是否 AII 1-是 0-不是 */
  isIaaFlag: 0 | 1 | null;
}

export interface InitWxDramaPlayInfo {
  /** data是加密串具体参考短剧播放器加密方案章节 */
  encryptedData: string;
  /** 免费的集数 */
  freeList: SerialItem[];
  /** 是否 AII 1-是 0-不是 */
  isIaaFlag: 0 | 1 | null;
}

type DyPlayletLockList = {
  /** 开始集数 (从1开始) */
  start_episode_no: number;
  /** 结束集数 */
  end_episode_no: number;
};

export interface InitDyDramaPlayInfo {
  /** 配置右下角自定义button，当前仅展示Array中的第一个icon */
  lockList: DyPlayletLockList[];
  /** 小程序分享参数 */
  unlockList: DyPlayletLockList[];
  /** 是否展示解锁页，默认为true */
  freeList: DyPlayletLockList[];
  /** 是否 AII 1-是 0-不是 */
  isIaaFlag: 0 | 1 | null;
  /** 是否二次弹窗*/
  twoAdvertFrame: boolean;
}

export interface SerialItem {
  /** 结束剧集编号，包含此集  */
  end_serial_no: number;
  /** 剧集编号，表示起始剧集编号，从1开始 */
  start_serial_no: number;
  /** 上面的起始和结束区间内剧集是否可播放。// 1-可播放,2-不可播放*/
  status: 1 | 2;
}

export type DramaChasingRank = {
  /** 短剧封面图 */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称 */
  dramaTitle: string;
  /** 导演  */
  director: number;
  /** 总集数 */
  seqNum: number;
  /** 简介 */
  dramaDesp?: string;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};

export type DramaPaidRank = {
  /** 短剧封面图  */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称 */
  dramaTitle: string;
  /** 导演 */
  director: number;
  /** 总集数 */
  seqNum: number;
  /** 简介 */
  dramaDesp?: string;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};

export type HomeBanner = {
  /** 横幅id */
  bannerId: number;
  /** 需要跳转的地址(jumpType为 2 时有效) */
  bannerLink: string;
  /** 类型：1-首页；2-追剧；  */
  bannerType: number;
  /** 轮播图的图片链接地址 */
  bannerUrl: string;
  /** 业务id */
  businessId: number;
  /** 状态：0-启用；1-停用； */
  status: number;
  /** 跳转类型：1-视频；2-链接； */
  jumpType: 1 | 2;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};

export type DramaViewRecord = {
  /** 短剧封面图 */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 剧集 ID */
  episodeId: number;
  /** 短剧名称 */
  dramaTitle: string;
  /** 观看至第几集  */
  episodeSeq: number;
  /** 总集数 */
  seqNum: number;
  /** 简介 */
  dramaDesp?: string;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
  /** 标签 */
  tags: string;
  /** 分类 */
  categoryList: string[];
};

export type HotDrama = {
  /** 短剧封面图 */
  dramaCover: string;
  /** 短剧id */
  dramaId: number;
  /** 短剧名称 */
  dramaTitle: string;
  /** 更新剧集数 */
  episodeNum: number;
  /** 第几集 */
  episodeSeq: number;
  /** 总集数 */
  seqNum: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
  /** 标签 */
  tags: string;
  /** 简介 */
  dramaDesp?: string;
  /** 热度 */
  hotNum: number;
  /** 分类 */
  categoryList: string[];
};
export type RecommendDrama = {
  /** 短剧封面图 */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称  */
  dramaTitle: string;
  /** 剧集 ID */
  episodeId: number;
  /** 第几集  */
  episodeSeq: number;
  /** 剧集标题 */
  episodeTitle: string;
  /** 封面图（多个逗号隔开）*/
  episodeCover: string;
  /** 剧集播放地址 */
  episodeUrl: string;
  /** 总集数 */
  seqNum: number;
  /** 是否追剧：0-否；1-是 */
  isChasing: number;
  /** 第三方剧集 ID */
  thirdEpisodeId: string;
  /** 是否静音 */
  _muted?: boolean;
  /** 标签 */
  tags: string;
  /** 是否静音 */
  _id?: string;
  /** 是否正在播放 */
  _playIng?: boolean;
  /** 是否显示 */
  _isShow: boolean;
};

export type HandpickDrama = {
  /** 短剧封面图 */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称  */
  dramaTitle: string;
  /** 更新剧集数  */
  episodeNum: number;
  /** 总集数  */
  seqNum: number;
  /** 第几集 */
  episodeSeq: number;
  /** 短剧简介 */
  dramaDesp: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
  /** 标签 */
  tags: string;
  /** 分类 */
  categoryList: string[];
};

export type PerformerRole = {
  /** 姓名 */
  name?: string;
  /** 角色 */
  role?: string;
  /** 人员头像 */
  staffHeadImage?: string | null;
  /** 人员性别：0-未知；1-男；2-女；*/
  staffSex?: number | null;
  /** 人员类型：1-导演；2-制片人；3-主演；4：演员； */
  staffType?: number | null;
};

export type DramaAllInfo = {
  /** 短剧封面图 */
  dramaCover: string;
  /** 剧集列表 */
  dramaEpisodeList: DramaEpisode[];
  /** 短剧名称 */
  dramaTitle: string;
  /** 是否追剧：0-否；1-是 */
  isChasing: 0 | 1;
  /** 总集数 */
  seqNum: number;
};

export type DramaCategory = {
  /** 短剧分类id */
  categoryId: number;
  /** 短剧分类名称  */
  categoryName: string;
};

export type DramaEpisode = {
  /** 封面图（多个逗号隔开） */
  episodeCover?: string | null;
  /** 剧集id */
  episodeId?: number | null;
  /** 第几集 */
  episodeSeq?: number | null;
  /** 剧集标题  */
  episodeTitle?: string | null;
  /** 剧集播放地址 */
  episodeUrl?: string | null;
  /** 状态 free-免费  lock-锁定 unlock-解锁  */
  state: 'free' | 'lock' | 'unlock';
  /** 自定义 ID */
  _id: string;
};

export type EpisodeItem = {
  /** 第几集 */
  seq: number;
  /** 状态 free-免费  lock-锁定 unlock-解锁  */
  state: 'free' | 'lock' | 'unlock';
};

export type ChasingDrama = {
  /** 短剧封面图  */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧更新状态：1-未上映；2-更新中；3-已完结；  */
  dramaStatus: number;
  /** 短剧更新状态：1-未上映；2-更新中；3-已完结；  */
  dramaStatusDesc: string;
  /** 短剧名称  */
  dramaTitle: string;
  /** 免费集数 */
  freeEpisodeNum: number;
  /** 更新至第几集 */
  episodeNum: number;
  /** 总集数  */
  seqNum: number;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};

export type MyChasingDrama = {
  /** 短剧封面图  */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称  */
  dramaTitle: string;
  /** 总集数  */
  seqNum: number;
  /** 简介 */
  dramaDesp?: string;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};
export type WatchDrama = {
  /** 短剧封面图  */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称  */
  dramaTitle: string;
  /** 总集数  */
  seqNum: number;
  /** 简介 */
  dramaDesp?: string;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};
export type SearchDrama = {
  /** 短剧封面图  */
  dramaCover: string;
  /** 短剧id  */
  dramaId: number;
  /** 短剧名称  */
  dramaTitle: string;
  /** 总集数  */
  seqNum: number;
  /** 简介 */
  dramaDesp?: string;
  /** 第几集 */
  episodeSeq: number;
  /** 剧集 ID */
  episodeId: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};

export type PayDrama = {
  /** 创建时间  */
  createTime: string;
  /** 短剧id */
  dramaId: number;
  /** 短剧名称 */
  dramaTitle: string;
  /** 封面图 */
  episodeCover: string;
  /** 剧集id */
  episodeId: number;
  /** 剧集标题  */
  episodeTitle: string;
  /** 第几集 */
  episodeSeq: number;
  /** 第三方剧集id */
  thirdEpisodeId?: string;
  /** 第三方短剧id */
  thirdDramaId?: string;
  /** 提审方appid */
  srcAppid: string;
};
